/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloDiaClase;
import com.ipartek.formacion.gestformwww.modelo.beans.Calificacion;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Karmele y Aitor
 * 23-12-2010
 */
public class CrearCalificacionesAccion implements Accion {

  
    private String visualizaralumno = "visualizar-alumno-accion";

    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        AccionRouter router = null;
          AccionServlet as=(AccionServlet) servlet;
        HttpSession sesion = request.getSession();
        ModeloDiaClase modelo = (ModeloDiaClase) servlet.getServletContext().getAttribute("ModeloDiaClase");
        Calificacion cali = new Calificacion();
        ArrayList<String> mensajes = new ArrayList<String>();
        ArrayList<String> errores = new ArrayList<String>();
        int idAlumno;
        int idCurso;
        Timestamp fecha;

        if (sesion.getAttribute("usuario") == null) {
            router = new AccionRouter("inicio", false);
        } else {
            try {
                if (request.getMethod().equalsIgnoreCase("POST")) {
                    idAlumno = Integer.parseInt(request.getParameter("idAlumno"));
                    idCurso = Integer.parseInt(request.getParameter("idCurso"));
                    cali.setAluId(idAlumno);
                    cali.setCurId(idCurso);
                    if (request.getParameter("calFch").isEmpty()) {
                        errores.add("error-calfecha-vacia");
                    } else {
                        cali.setCalFch(Verificador.stringAFecha(request.getParameter("calFch")));
                    }
                    cali.setCalNota(request.getParameter("calNota"));
                    if (cali.getCalNota() == -1) {
                        errores.add("error-nota-invalida");
                    }
                    if (Verificador.caracteresCorrectos(request.getParameter("calObserv"))) {
                        cali.setCalObserv(request.getParameter("calObserv"));
                    } else {
                        errores.add("error-observaciones-calificacion");
                    }

                    if (!errores.isEmpty()) {
                        request.setAttribute("errores", errores);
                    } else if (Verificador.sinReenvio("errores", sesion, request)) {
                        try {
                            fecha = Verificador.stringAFecha(request.getParameter("calFch"));
                            if (!modelo.buscarCalificacion(idAlumno, idCurso, fecha)) { //Si no existe en la BBDD
                                modelo.crearCalificacion(cali);
                                mensajes.add("guardar-calificacion-correcto");
                                sesion.setAttribute("mensajes", mensajes);
                            }else{//Si esta en la BBDD
                                errores.add("error-calfecha-duplicada");
                                request.setAttribute("errores", errores);
                            }
                        } catch (GestorFormacionExcepcion ex) {
                           Logger.getLogger(CrearCalificacionesAccion.class.getName()).log(Level.SEVERE, null, ex);
                            errores.add(ex.getMessage());
                            request.setAttribute("errores", errores);
                        }
                    }
                }
              
                  router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizaralumno),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(CrearCalificacionesAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(CrearCalificacionesAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(CrearCalificacionesAccion.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return router;
    }

   
}
